home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 08 - 1992 / 08.03 Jul 92 / Fast Random Numbers / SANERandomNumbers.p < prev    next >
Encoding:
Text File  |  1991-10-04  |  2.4 KB  |  101 lines  |  [TEXT/MPS ]

  1. UNIT RandomNumbers;
  2.  
  3. {  This unit was written in MPW Pascal, v3.2.
  4.  
  5.                           Jon Bell
  6.                  Dept. of Physics & Comp. Sci.
  7.                      Presbyterian College
  8.                        Clinton SC 29325
  9.                      Compuserve #70441,353
  10.                         October, 1991                      }
  11.  
  12. INTERFACE
  13.  
  14. USES Sane;
  15.  
  16. {----------------------------------------------------------}
  17.  
  18. procedure InitRandomSeed (newSeed : longint);
  19.  
  20. {  Initializes the random number seed to "newSeed".  You
  21.    must call this procedure once, at the beginning of your
  22.    program, before you use any of the following functions.
  23.    As far as randomness is concerned, it makes no difference
  24.    what value you use for "newSeed", so long as it isn't
  25.    zero.  Using different seeds merely gives you different
  26.    sequences of "random" numbers.  Using the same seed each
  27.    time you run the program gives you the same sequence of
  28.    "random" numbers each time, which may be useful for
  29.    debugging. }
  30.  
  31. {----------------------------------------------------------}
  32.  
  33. function RandomSeed : longint;
  34.  
  35. {   Returns the current value of the random number seed.   }
  36.  
  37. {----------------------------------------------------------}
  38.  
  39. function RandomReal : extended;
  40.  
  41. {  Returns a real number, "randomly" selected from the
  42.    interval [0,1].                                         }
  43.  
  44. {----------------------------------------------------------}
  45.  
  46. function RandomInteger (max : longint) : longint;
  47.  
  48. {  Returns an integer, "randomly" selected from the
  49.    interval [1,max].                                       }
  50.  
  51. {----------------------------------------------------------}
  52. {----------------------------------------------------------}
  53.  
  54. IMPLEMENTATION
  55.  
  56. const
  57. m = 2147483647;
  58.  
  59. var
  60. seed : extended;
  61.  
  62. {----------------------------------------------------------}
  63.  
  64. procedure InitRandomSeed (newSeed : longint);
  65.  
  66. begin
  67. seed := newSeed
  68. end;
  69.  
  70. {----------------------------------------------------------}
  71.  
  72. function RandomSeed : longint;
  73.  
  74. begin
  75. RandomSeed := round(seed)
  76. end;
  77.  
  78. {----------------------------------------------------------}
  79.  
  80. function RandomReal : extended;
  81.  
  82. begin
  83. RandomReal := RandomX (seed) / m;
  84. end;
  85.  
  86. {----------------------------------------------------------}
  87.  
  88. function RandomInteger (max : longint) : longint;
  89.  
  90. var
  91. ignore : extended;
  92.  
  93. begin
  94. ignore := RandomX (seed);
  95. RandomInteger := (round(seed) mod max) + 1
  96. end;
  97.  
  98. {----------------------------------------------------------}
  99.  
  100. END.
  101.